home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagn_r.zip / NUMBERS.SWG / 0053_Hex encode binary files.pas < prev    next >
Pascal/Delphi Source File  |  1994-08-25  |  4KB  |  132 lines

  1. (*************************************************************************
  2.  
  3.              ===============================================
  4.              Hex-encode binary files in debug-script batches
  5.              ===============================================
  6.                  Copyright (c) 1993,1994 by José Campione
  7.                    Ottawa-Orleans Personal Systems Group
  8.                           Fidonet: 1:163/513.3
  9.  
  10.         This program reads a binary file and creates a hex-encoded 
  11.         text file. This text file is also a batch file and a debug 
  12.         script which, when run, will use debug.exe or debug.com to 
  13.         reconstruct the binary file. 
  14.  
  15. **************************************************************************)
  16. {$M 2048,0,0}
  17. program debugbat;
  18.  
  19. uses crt,dos;
  20.  
  21. const
  22.   maxsize = $FFEF;
  23.  
  24. type
  25.   string2 = string[2];
  26.  
  27. var
  28.   ifile : file of byte;
  29.   ofile : text;
  30.   n : word;
  31.   s : word;
  32.   b : byte;
  33.   fsize : word;
  34.   dir : dirstr;
  35.   nam : namestr;
  36.   ext : extstr;
  37.   filename : string[12];
  38.   i : integer;
  39.  
  40. function b2x(b: byte): string2;
  41. const hexdigit: array[0..15] of char = '0123456789ABCDEF';
  42. begin
  43.   b2x:= hexdigit[b shr 4] + hexdigit[b and $0F];
  44. end;
  45.  
  46. procedure myhalt(e: byte);
  47. begin
  48.   gotoxy(1,wherey);
  49.   case e of
  50.     0 : writeln('done.');
  51.     1 : writeln('error in command line.');
  52.     2 : writeln('file exceeds the 65K limit.');
  53.     else begin
  54.       e:= 255;
  55.       writeln('Unknown error.');
  56.     end;
  57.   end;
  58.   halt(e);
  59. end;
  60.  
  61. begin
  62.   writeln;
  63.   writeln('DEBUGBAT v.1.0. Copyright (c) Feb/93 by J. Campione.');
  64.   write('Wait... ');
  65.   n := 0;
  66.   s := $F0;
  67.   {$I-}
  68.   assign(ifile,paramstr(1));
  69.   reset(ifile);
  70.   {$I+}
  71.   if (paramcount <> 1) or (ioresult <> 0) or (paramstr(1) = '') then myhalt(1);
  72.   fsplit(paramstr(1),dir,nam,ext);
  73.   for i:= 1 to length(ext) do ext[i]:= upcase(ext[i]);
  74.   for i:= 1 to length(nam) do nam[i]:= upcase(nam[i]);
  75.   if ext = '.EXE' then filename:= nam + '.EXX'
  76.                   else filename:= nam + ext;
  77.   fsize:= filesize(ifile);
  78.   if fsize > maxsize then myhalt(2);
  79.   assign(ofile, nam + '.BAT');
  80.   rewrite(ofile);
  81.   writeln(ofile,'@echo off');
  82.   writeln(ofile,'rem');
  83.   writeln(ofile,'rem *************************************************************************');
  84.   writeln(ofile,'rem File ',nam + '.BAT',' was created by program DEBUGBAT.EXE v.1.0');
  85.   writeln(ofile,'rem Copyright (c) Feb. 1993 by J. Campione (1:163/513.3)');
  86.   writeln(ofile,'rem Running this file uses DEBUG to reconstruct file ',nam + ext);
  87.   writeln(ofile,'rem *************************************************************************');
  88.   writeln(ofile,'rem');
  89.   writeln(ofile,'echo DEBUGBAT v.1.0. Copyright (c) Feb/93 by J. Campione.');
  90.   writeln(ofile,'if not exist %1debug.exe goto error1');
  91.   writeln(ofile,'goto decode');
  92.   writeln(ofile,':error1');
  93.   writeln(ofile,'if not exist %1debug.com goto error2');
  94.   writeln(ofile,':decode');
  95.   writeln(ofile,'echo Wait...');
  96.   writeln(ofile,'debug < %0.BAT > nul');
  97.   writeln(ofile,'goto name');
  98.   writeln(ofile,':error2');
  99.   writeln(ofile,'echo Run %0.BAT with DEBUG''s path in the command line');
  100.   writeln(ofile,'echo example:   %0 c:\dos\    ... notice the trailing slash!');
  101.   write(ofile,'goto end');
  102.   while not eof(ifile) do begin
  103.     n:= n + 1;
  104.     read(ifile,b);
  105.     if n mod 16 = 1 then begin
  106.       s := s + 16;
  107.       writeln(ofile);
  108.       write(ofile,'E ',b2x(hi(s)),b2x(lo(s)));
  109.     end;
  110.     write(ofile,' ',b2x(b));
  111.   end;
  112.   writeln(ofile);
  113.   writeln(ofile,'RCX');
  114.   writeln(ofile,b2x(hi(n)),b2x(lo(n)));
  115.   if ext = '.EXE' then begin
  116.     filename:= nam + '.EXX';
  117.   end;
  118.   writeln(ofile,'N ',filename);
  119.   writeln(ofile,'W');
  120.   writeln(ofile,'Q');
  121.   writeln(ofile,':name');
  122.   if ext = '.EXE' then begin
  123.     writeln(ofile,'if exist ',nam + ext,' del ',nam + ext);
  124.     writeln(ofile,'rename ',nam + '.EXX ',nam + ext);
  125.   end;
  126.   writeln(ofile,':end');
  127.   close(ifile);
  128.   close(ofile);
  129.   myhalt(0);
  130. end.
  131.  
  132.